package com.lcgs.manage.service.impl;

import java.util.List;

import com.lcgs.common.core.domain.entity.SysUser;
import com.lcgs.common.utils.DateUtils;
import com.lcgs.common.utils.SecurityUtils;
import com.lcgs.system.mapper.SysUserMapper;
import com.lcgs.system.service.ISysUserService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.lcgs.manage.mapper.EmpMapper;
import com.lcgs.manage.domain.Emp;
import com.lcgs.manage.service.IEmpService;
import org.springframework.transaction.annotation.Transactional;

/**
 * 员工管理Service业务层处理
 * 
 * @author lc
 * @date 2025-09-17
 */
@Service
public class EmpServiceImpl implements IEmpService 
{
    @Autowired
    private EmpMapper empMapper;
    @Autowired
    private ISysUserService sysUserService;

    /**
     * 查询员工管理
     * 
     * @param employeeId 员工管理主键
     * @return 员工管理
     */
    @Override
    public Emp selectEmpByEmployeeId(Long employeeId)
    {
        return empMapper.selectEmpByEmployeeId(employeeId);
    }

    /**
     * 查询员工管理列表
     * 
     * @param emp 员工管理
     * @return 员工管理
     */
    @Override
    public List<Emp> selectEmpList(Emp emp)
    {
        return empMapper.selectEmpList(emp);
    }

    /**
     * 新增员工管理
     * 
     * @param emp 员工管理
     * @return 结果
     */
    @Override
    @Transactional
    public int insertEmp(Emp emp)
    {
        SysUser sysUser = new SysUser();
        // 使用时间戳确保唯一性，同时保持长度适中
        String userName = emp.getPhone();
        sysUser.setUserName(userName);
        String password = "admin123";
        sysUser.setPassword(SecurityUtils.encryptPassword(password));
        sysUser.setNickName("lc");

        int userResult = sysUserService.insertUser(sysUser);

        if (userResult <= 0) {
            throw new RuntimeException("创建商家用户失败");
        }

        // 强制刷新事务
//        TransactionAspectSupport.currentTransactionStatus().flush();

        // 检查并获取用户ID
        Long userId = sysUser.getUserId();
        System.out.println("用户ID：" + userId);
        // 如果主键回写失败，需要通过其他方式获取ID
        if (userId == null) {
            // 通过用户名重新查询获取用户ID
            SysUser queryUser = sysUserService.selectUserByUserName(sysUser.getUserName());
            if (queryUser != null) {
                userId = queryUser.getUserId();
            }
        }

        // 如果还是获取不到ID，则抛出异常
        if (userId == null) {
            throw new RuntimeException("创建商家用户成功但无法获取用户ID");
        }

        emp.setUserId(userId);
        emp.setCreateTime(DateUtils.getNowDate());
        return empMapper.insertEmp(emp);
    }

    /**
     * 修改员工管理
     * 
     * @param emp 员工管理
     * @return 结果
     */
    @Override
    public int updateEmp(Emp emp)
    {
        emp.setUpdateTime(DateUtils.getNowDate());
        return empMapper.updateEmp(emp);
    }

    /**
     * 批量删除员工管理
     * 
     * @param employeeIds 需要删除的员工管理主键
     * @return 结果
     */
    @Override
    public int deleteEmpByEmployeeIds(Long[] employeeIds)
    {
        return empMapper.deleteEmpByEmployeeIds(employeeIds);
    }

    /**
     * 删除员工管理信息
     * 
     * @param employeeId 员工管理主键
     * @return 结果
     */
    @Override
    public int deleteEmpByEmployeeId(Long employeeId)
    {
        return empMapper.deleteEmpByEmployeeId(employeeId);
    }

    @Override
    public Emp selectEmpByUserId(Long userId) {

        return empMapper.selectEmpByUserId(userId);

    }
}
